
package nc.itf.hrppl.procancel.procancelhvo;

import java.util.Map;

import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVO;

import nc.vo.hrppl.procancel.AggProCancelHVO;
import nc.vo.hrppl.procancel.ProCancelHVO;
import nc.pub.billcode.vo.BillCodeContext;

public interface  IProCancelHVOService{

	/**
	 * 项目退库申请主表的AGGVO查询操作
	 * 根据主键条件查询Agg数组
	 * @param pk主键
	 * @return 结果数组
	 */
    AggProCancelHVO[] listAggProCancelHVOByPk(String... pks) throws BusinessException;
	
	/**
	 * 项目退库申请主表的AGGVO查询操作
	 * 根据主键条件查询Agg数组
	 * @param pk主键
	 * @return 结果数组
	 */
    AggProCancelHVO[] listAggProCancelHVOByPk(boolean blazyLoad, String... pks) throws BusinessException;
	
	/**
	 * 项目退库申请主表的AGGVO查询操作
	 * 根据主键条件查询Agg对象
	 * @param pk 主键
	 * @return 结果对象
	 */
    AggProCancelHVO findAggProCancelHVOByPk(String pk) throws BusinessException;
	
	/**
	 * 项目退库申请主表的AGGVO查询操作
	 * 根据条件字符串查询Agg数组
	 * @param condition 主键
	 * @return 结果数组
	 */
    AggProCancelHVO[] listAggProCancelHVOByCondition(String condition) throws BusinessException;
	
	/**
	 * 项目退库申请主表的AGGVO查询操作
	 * 根据条件字符串查询Agg数组
	 * @param condition 条件
	 * @param orderPath 排序集合
	 * @return 结果数组
	 */
    AggProCancelHVO[] listAggProCancelHVOByCondition(String condition, String[] orderPath) throws BusinessException;
	
	/**
	 * 项目退库申请主表的主表VO查询操作
	 * 根据主键条件查询Agg数组
	 * @param pk主键
	 * @return 结果数组
	 */
    ProCancelHVO[] listProCancelHVOByPk(String... pks) throws BusinessException;
	
	/**
	 * 项目退库申请主表的主表VO查询操作
	 * 根据主键条件查询Agg对象
	 * @param pk 主键
	 * @return 结果对象
	 */
    ProCancelHVO findProCancelHVOByPk(String pk) throws BusinessException;
	
	/**
	 * 项目退库申请主表的主表VO查询操作
	 * 根据条件字符串查询Agg数组
	 * @param condition 主键
	 * @return 结果数组
	 */
    ProCancelHVO[] listProCancelHVOByCondition(String condition) throws BusinessException;
	/**
	 * 项目退库申请主表的主表VO查询操作
	 * 根据条件字符串查询Agg数组
	 * @param condition 主键
	 * @return 结果数组
	 */
    ProCancelHVO[] listProCancelHVOByCondition(String condition, String[] orderPath) throws BusinessException;

	/**
	 * 项目退库申请主表的主表pk查询操作
	 * 根据条件字符串查询pk数组数组
	 * @param condition 查询方案+
	 * @return 结果数组
	 */
    String[] listProCancelHVOPkByCond(String condition) throws BusinessException;
	
	/**
	 * 项目退库申请主表的主表pk查询操作
	 * 根据条件字符串查询pk数组数组
	 * @param condition 查询方案+
	 * @return 结果数组
	 */
    String[] listProCancelHVOPkByCond(String condition, String[] orderPath) throws BusinessException;
	/**
	 * 给主实体vo设置默认值
	 * @param vo
	 */
    void initDefaultData(ProCancelHVO vo);
	
	
	/**
	 * 预新增操作项目退库申请主表数据
	 * @param userJson  新增时需要的扩展参数对象
	 */
    AggProCancelHVO preAddAggProCancelHVO(Map<String, Object> userJson) throws BusinessException;
	
	AggProCancelHVO preAddAggProCancelHVO(AggProCancelHVO vo, Map<String, Object> userJson) throws BusinessException;
	 /**
	 * 预编辑操作项目退库申请主表数据
	 * @param userJson  新增时需要的扩展参数对象
	 */
     AggProCancelHVO preEditAggProCancelHVO(String pk) throws BusinessException;
	
	 /**
	 * 复制操作项目退库申请主表数据
	 * 
	 */
     AggProCancelHVO copyAggProCancelHVO(String pk) throws BusinessException;
	/**
	 * 保存操作项目退库申请主表数据
	 * @param vos 保存对象
	 * @return @
	 */
    AggProCancelHVO[] saveAggProCancelHVO(AggProCancelHVO vo) throws BusinessException;

	AggProCancelHVO[] saveAggProCancelHVO(AggProCancelHVO[] vos) throws BusinessException;
	
	
	/**
	 * 删除操作项目退库申请主表数据
	 * @param vos 删除对象
	 * @return @
	 */
    AggProCancelHVO[] deleteAggProCancelHVOs(Map<String, String> tsMap) throws BusinessException;
	
	/**
	 * 加载树类型数据项目退库申请主表
	 * @param vos 对象
	 * @return @
	 */
    <T> T[] loadTreeData(Class<T> clazz, Map<String, Object> userJson) throws BusinessException;

	/**
	 * 根据主表主键查询子表pks
	 * @param childClazz 子表class
	 * @param parentId 主表主键
	 * @return 子表pks
	 * @throws BusinessException
	 */
	String[] queryChildPksByParentId(Class childClazz, String parentId) throws BusinessException;

	/**
	 * 根据子表主键查询子表数据
	 * @param childClazz 子表class
	 * @param pks 子表
	 * @return 子表vos
	 * @throws BusinessException
	 */
	SuperVO[] queryChildVOByPks(Class childClazz, String[] pks) throws BusinessException;
	/**
	 * 单个提交
	 * @param actionName 动作脚本编码
	 * @param tsMap  key为主键  value为ts
	 * @param assign 指派信息，只有单个提交允许指派
	 * @return Object
	 * @throws BusinessException
	 */
    Object commitAggProCancelHVO(String actionName, Map<String, String> tsMap, Object assign) throws BusinessException;
	/**
	 * 批量提交
	 * @param actionName 动作脚本编码
	 * @param tsMap  key为主键  value为ts
	 * @throws BusinessException
	 */
    Object batchCommitAggProCancelHVO(String actionName, Map<String, String> tsMap) throws BusinessException;
	/**
	 * 单个收回
	 * @param actionName 动作脚本编码
	 * @param tsMap  key为主键  value为ts
	 * @return
	 * @throws BusinessException
	 */
    Object uncommitAggProCancelHVO(String actionName, Map<String, String> tsMap) throws BusinessException;
	/**
	 * 批量收回
	 * @param actionName 动作脚本编码
	 * @param tsMap  key为主键  value为ts
	 * @throws BusinessException
	 */
    Object batchUncommitAggProCancelHVO(String actionName, Map<String, String> tsMap) throws BusinessException;
	/**
	 * SAVEBASE 回调--动作脚本处调用
	 * @param vos
	 * @throws BusinessException
	 * @return
	 */
    AggProCancelHVO[] callbackSAVEBASE(AggProCancelHVO... vos) throws BusinessException;
	
	/**
	 * SAVE 回调--动作脚本处调用
	 * @param vos
	 * @throws BusinessException
	 * @return
	 */
    AggProCancelHVO[] callbackSAVE(AggProCancelHVO... vos) throws BusinessException;
	
	/**
	 * UNSAVE 回调--动作脚本处调用
	 * @param vos
	 * @throws BusinessException
	 * @return
	 */
    AggProCancelHVO[] callbackUNSAVE(AggProCancelHVO... vos) throws BusinessException;
	
	/**
	 * APPROVE 回调--动作脚本处调用
	 * @param vos
	 * @throws BusinessException
	 * @return
	 */
    AggProCancelHVO[] callbackAPPROVE(AggProCancelHVO... vos) throws BusinessException;
	
	/**
	 * UNAPPROVE 回调--动作脚本处调用
	 * @param vos
	 * @throws BusinessException
	 * @return
	 */
    AggProCancelHVO[] callbackUNAPPROVE(AggProCancelHVO... vos) throws BusinessException;
	
	/**
	 * 获取默认(全局)编码规则上下文
	 * 
	 * @param coderuleid 编码规则主键?
	 * @return 编码规则上下文
	 * @throws BusinessException
	 */
    BillCodeContext getBillCodeContext(String coderuleid) throws BusinessException;

	/**
	 * 获取编码规则上下文
	 * 
	 * @param coderuleid
	 * @param pkgroup
	 * @param pkorg
	 * @return
	 * @throws BusinessException
	 */
    BillCodeContext getBillCodeContext(String coderuleid, String pkgroup, String pkorg) throws BusinessException;

}